package com.example.CRUDDemo;


import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/api/products")
public class ProductController {
private final List< Product> productList = new ArrayList<>();
private long nextId = 1;

    @GetMapping
    public List<Product>getAllProducts() {
        return productList;
    }

    @GetMapping("/{id}")

    public ResponseEntity<Product> getProductById(@PathVariable Long id) {
        Optional< Product>product = productList.stream()
                .filter(p -> p.getId().equals(id))
                .findFirst();
        return product.map(p->new ResponseEntity<>(p, HttpStatus.OK))
                .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
    }

    @PostMapping
    public ResponseEntity<Product> createProduct(@RequestBody Product product) {
        product.setId(nextId++);
        productList.add(product);
        return new ResponseEntity<>(product, HttpStatus.CREATED);
    }



    @PutMapping("/{id}")
    public ResponseEntity<Product> updateProduct(@PathVariable Long id, @RequestBody Product updatedproduct) {

        Optional< Product>existingProduct = productList.stream()
            .filter(p -> p.getId().equals(id))
            .findFirst();
            if (existingProduct.isPresent())
            {
                Product productToUpdate = existingProduct.get();
                productToUpdate.setName(updatedproduct.getName());
                productToUpdate.setPrice(updatedproduct.getPrice());
                return new ResponseEntity<>(productToUpdate, HttpStatus.OK);
            }
                else {
                    return new ResponseEntity<>(HttpStatus.NOT_FOUND);
                }

    }

@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteProduct(@PathVariable Long id) {
            boolean removed = productList.removeIf(p -> p.getId().equals(id));
            if (removed) {
                return new ResponseEntity<>(HttpStatus.NO_CONTENT);
            }
            else {
                return new ResponseEntity<>(HttpStatus.NOT_FOUND);
            }

}








}
